home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 2 / CU Amiga Magazine's Super CD-ROM 02 (1996)(EMAP Images)(GB)[!][issue 1996-04].iso / magazine / amiga_e / elist.src.archive / 000011_crash!kirk.safb.af.mil!BWILLS_Thu, 17 Jun 93 13:49:08 PST.msg < prev    next >
Text File  |  1993-08-31  |  2KB  |  80 lines

  1. Received: by bkhouse.cts.com (V1.16/Amiga)
  2.     id AA00000; Thu, 17 Jun 93 13:49:08 PST
  3. Received: from kirk.safb.af.mil by crash.cts.com with smtp
  4.     (Smail3.1.28.1 #15) id m0o6PN5-0000PdC; Thu, 17 Jun 93 12:11 PDT
  5. Message-Id: <m0o6PN5-0000PdC@crash.cts.com>
  6. Date: 17 Jun 93 14:08:00 CST
  7. From: "Barry D. Wills" <BWILLS@kirk.safb.af.mil>
  8. To: "amigae" <amigae@bkhouse.cts.com>
  9. Subject: sscanf.e
  10.  
  11. To Son Le:
  12.  
  13. Here is a shell for the sscanf() function you were asking about.  Didn't have
  14. time to work out the string parsing.  Don't know if/when I'll work on it.  But
  15. this is a [good?] example of how to put things into a list variable and get them
  16. out again.  This example goes one further and shows how you can simulate passing
  17. a variable number of args into a proc by sending them as a list.  Let me know
  18. what you think (that's meant for everybody, especially Wouter!)
  19.  
  20. -- Barry
  21.  
  22. ----------  CUT HERE  ---------------------------------------------------------
  23. DEF ssf_x,
  24.     ssf_var : PTR TO LONG,
  25.     ssf_forCount
  26.  
  27.  
  28. PROC assign ()
  29.   ssf_var [ssf_forCount] := ssf_x
  30.   INC ssf_forCount
  31. ENDPROC
  32.  
  33.  
  34. PROC sscanf (str, fmt, varList)
  35.   DEF numRead = 0, i, listLen
  36.  
  37.   /* Get/set length of list. */
  38.   listLen := ListLen (varList)
  39.   SetList (varList, listLen)
  40.  
  41.   /* Extract vars from list. */
  42.   ssf_var := New (listLen * 4)  /* 4=SIZEOF LONG. */
  43.   ssf_forCount := 0
  44.   ForAll ({ssf_x}, varList, `assign ())
  45.  
  46. /*------------------------------------------------------------------------*/
  47. /* Just some displays to see what we got as params.                       */
  48. /* This is where your code goes to parse the string.                      */
  49.  
  50.   WriteF ('ListLen(varList)=\d\n', listLen)
  51.   WriteF ('\s\n' +
  52.           '\s\n', str, fmt)
  53.   FOR i := 0 TO (listLen - 1)
  54.     WriteF ('ssf_var[\d]=\d\n', i, ssf_var [i])
  55.   ENDFOR
  56.   WriteF ('\n')
  57.  
  58. /* End of displays.                                                       */
  59. /*------------------------------------------------------------------------*/
  60.  
  61.   Dispose (ssf_var)
  62. ENDPROC  numRead
  63.  
  64.  
  65.  
  66. PROC main ()
  67.   DEF string [20] : STRING,
  68.       format [20] : STRING,
  69.       a=90, b=91, c=92, d=93
  70.  
  71.   StrCopy (string, '100 101 102 103', ALL)
  72.   StrCopy (format, '\d \d \d \d', ALL)
  73.   /* ---> OR...
  74.     StrCopy (format, '%d %d %d %d', ALL)
  75.   */
  76.  
  77.   sscanf (string, format, [a,b,c,d])
  78. ENDPROC
  79.  
  80. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%